/*
 * @Description: AT24C16C 驱动文件
 * @Author: diyhome
 * @Date: 2020-08-08 22:18
 * @File: AT24C16C
*/

#ifndef YAOKONGQI_AT24C16C_H
#define YAOKONGQI_AT24C16C_H
#include "i2c.h"
#include "stm32f1xx_hal_i2c.h"
#include "stdio.h"

//#define AT24C16_IIC_NAME &hi2c2         // 指定使用哪一个硬件IIC
#define AT24Cx_MEM_ADD I2C_MEMADD_SIZE_8BIT    // 数据宽度
#define EEPROM_SIZE 0x800                       // 2K Byte = 128 Pages * 16 Byte
#define EEPROM_PAGE_MASK 16                     // 每页有多少个Byte: 16
#define AT24Cx_TIME_OUT 0xFF                    // 超时时间
#define AT24Cx_FAIL_RETRIES 1024                // 写入/读取失败重试次数

#define TEST_SIZE 1024

#ifndef AT24C16_IIC_NAME
HAL_StatusTypeDef AT24Cx_Init(I2C_HandleTypeDef *hi2c_id);
#endif

/**
 * 一次性写入若干个数据
 * @param data 数据数字指针
 * @param addr 写/读数据起始地址
 * @param data_len 数据长度
 */
HAL_StatusTypeDef AT24Cx_Write_AnyBytes(uint8_t *data, uint16_t addr, uint16_t data_len);
HAL_StatusTypeDef AT24Cx_Read_AnyBytes(uint8_t *data, uint16_t addr, uint16_t data_len);
/**
 * 扫描I2C设备地址
 * 通过printf函数输出,所以需要重定向printf函数
 * @param iic_port 端口号,比如:&hi2c1
 */
void Scan_IIC_Device_Id(I2C_HandleTypeDef *iic_port);
#endif //YAOKONGQI_AT24C16C_H
